package com.example.demo8;

import java.awt.Point;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class EnemySystem {
    private final List<Enemy> enemies = new ArrayList<>();
    private final EnemyFactory factory = new EnemyFactory();
    private final Random random = new Random();

    /**
     * 生成敌人
     *
     * @param count    需要生成的敌人数量
     * @param playerPos 玩家当前位置
     * @param bounds   游戏地图的边界
     */
    public void spawnEnemies(int count, Point playerPos, Rectangle bounds) {
        for (int i = 0; i < count; i++) {
            Point pos;
            do {
                // 随机生成敌人位置，确保与玩家的距离不小于200像素
                pos = new Point(
                        random.nextInt(bounds.width - 100) + 50,
                        random.nextInt(bounds.height - 100) + 50
                );
            } while (playerPos.distance(pos) < 200); // 防止敌人生成太接近玩家

            // 随机选择敌人类型并生成敌人
            enemies.add(factory.createEnemy(pos.x, pos.y, random.nextInt(3)));
        }
    }

    /**
     * 更新所有敌人状态，移动和射击
     *
     * @param playerX        玩家X坐标
     * @param playerY        玩家Y坐标
     * @param collisionSystem 碰撞检测系统
     * @param projectiles    子弹列表，用于敌人发射子弹
     */
    public void updateAll(double playerX, double playerY, CollisionSystem collisionSystem, List<Projectile> projectiles) {
        // 更新每个敌人的状态
        for (Enemy enemy : enemies) {
            enemy.update(playerX, playerY, collisionSystem, projectiles); // 更新敌人的移动和射击
        }

        // 移除死亡的敌人
        enemies.removeIf(enemy -> enemy.health <= 0);
    }

    /**
     * 获取当前所有敌人
     *
     * @return 当前敌人的列表
     */
    public List<Enemy> getEnemies() {
        return new ArrayList<>(enemies);
    }
}
